
(defglobal ?*vector* = (new java.util.Vector))

;(assert(respuesta 1))
;(assert(curriculum y))

(defrule buscaTrabajo
(respuesta  1)
=>
(assert(nombre buscaTrabajo))
(retract-string "(respuesta  1)")
)

(defrule mejoraPersona
(respuesta 2)
=>
(assert (nombre mejoraPersona))
    (retract-string "(respuesta  2)")
)

(defrule mejoraVida
(respuesta 3)
=>
(assert(nombre mejoraVida))
    (retract-string "(respuesta  3)")
)

(defrule condicionFisica
(respuesta 4)
=>
(assert(nombre mejoraFisico))
    (retract-string "(respuesta  4)")
)

(defrule mejoraAcademica
(respuesta 5)
=>
(assert(nombre mejoraAcademica))
    (retract-string "(respuesta  5)")
)

(defrule buscandoTrabajo
(and(nombre buscaTrabajo)(curriculum y))
=>
(assert(empiezaTrabajar y))
    (retract-string "(curriculum y)")
)


(defrule noCurriculum
(and(nombre buscaTrabajo)(curriculum n))
=>
(assert(hazCurriculum y))
    (retract-string "(curriculum n)")
)

(defrule hazCurriculum
(hazCurriculum y)
=>
	(call ?*writer* write "Aqui te mostramos unos consejos para realizar un buen curriculum")
(call ?*writer* newLine)
	(call ?*writer* write "Seguir una estructura: encabezamiento, datos personales, formacion y estudios, experiencia profesional.
- Se recomienda hacer hincapie en aquellas experiencias o formacion mas relacionadas con el puesto para el que presentas el curriculum.
- Todos los datos que se incluyan en el curriculum deben ser demostrables.
- Omite todos los aspectos negativos
- Omitir datos obvios, como los estudios que realizaste en las escuelas primaria, secundaria y bachillerato.
- Resaltar los logros alcanzados en el servicio social, practicas profesionales o trabajos anteriores,
señalando la informacion que demuestre las competencias desarrolladas.
- No colocar sueldo pretendido a menos que la empresa o institucion lo solicite.
Si fuese el caso, investigar los rangos de sueldo del puesto deseado en relacion con la experiencia propia en ese rubro.
")
(call ?*writer* newLine)
    (retract-string "(hazCurriculum y)")
(call ?*writer* close)
)

(defrule nivelESO
(and(nombre  mejoraAcademica)(nivel eso))
=>
(call ?*writer* write "Si no te gusta estudiar deberias meterte al mundo laboral(para lo que puedes consultar nuestra seccion)")
(call ?*writer* newLine)
	(call ?*writer* write "sino deberias continuar estudiando un bachillerato,ahora te mostramos cuales hay, a ver si te gustan" )
(call ?*writer* newLine)
	(call ?*writer* write "Modalidad Artes" )
(call ?*writer* newLine)
	(call ?*writer* write	"Opcion Artes Plasticas" )
(call ?*writer* newLine)
	(call ?*writer* write	"Opcion Artes Aplicadas y Diseño" )
(call ?*writer* newLine)
	(call ?*writer* write "Modalidad de Bachillerato de Humanidades y Ciencias Sociales:" )
(call ?*writer* newLine)
	(call ?*writer* write	"Opcion Humanidades")
(call ?*writer* newLine)
	(call ?*writer* write	"Opcion Ciencias Sociales: Geografia e Historia" )
(call ?*writer* newLine)
	(call ?*writer* write	"Opcion Ciencias Sociales: Administracion y Gestion")
(call ?*writer* newLine)
	(call ?*writer* write "Modalidad de Bachillerato Tecnologico." )
(call ?*writer* newLine)
	(call ?*writer* write "  	Opcion Ciencias e Ingenieria")
(call ?*writer* newLine)
	(call ?*writer* write "	Opcion Tecnologia Industrial" )
(call ?*writer* newLine)
	(call ?*writer* write "Modalidad de Bachillerato de Ciencias de la Naturaleza y de la Salud.")
(call ?*writer* newLine)
	(call ?*writer* write "	Opcion Ciencias e Ingenieria" )
(call ?*writer* newLine)
	(call ?*writer* write "	Opcion Ciencias de la Salud" )
(call ?*writer* newLine)
     (retract-string "(nivel eso)")
(call ?*writer* close)
)


(defrule empiezaTrabajar
(empiezaTrabajar y)
=>
	(call ?*writer* write "Ya puedes empezar a trabajar")
(call ?*writer* newLine)
	(call ?*writer* write "Aqui te mostramos unos consejos para intentar ayudarte a buscar trabajo")
(call ?*writer* newLine)
	(call ?*writer* write "Busca en peridicos, revistas, internet,etc empresas del sector en el que desees trabajar" )
(call ?*writer* newLine)
	(call ?*writer* write "A continuacion manda tu curriculum por la via que te pida la empresa" )
(call ?*writer* newLine)
	(call ?*writer* write "Recuerda mandar un buen curriculum, si no has seguido nuestros consejos" )
(call ?*writer* newLine)
	(call ?*writer* write "Despues de todo esto te toca esperar pacientemente" )
(call ?*writer* newLine)
	(call ?*writer* write "Mucha Suerte" )
(call ?*writer* newLine)
(call ?*writer* close)
    (retract-string "(empiezaTrabajar y)")

)


(defrule nivelGraduado
(and(nombre  mejoraAcademica)(nivel graduado))
=>
	(call ?*writer* write "Si no te gusta estudiar deberias meterte al mundo laboral(para lo que puedes consultar nuestra seccion)")
(call ?*writer* newLine)
(call ?*writer* write "sino deberias continuar estudiando la ESO,lo que te abrira nuevas puertas, aqui tienes sus caracteristicas" )
(call ?*writer* newLine)
	(call ?*writer* write "* Es una etapa terminal para determinados estudiantes y para otros es propedeutica (permite continuar los estudios)." )
(call ?*writer* newLine)
	(call ?*writer* write "* Los objetivos son preparar al alumno para el mundo laboral y la vida academica adulta." )
(call ?*writer* newLine)
	(call ?*writer* write "* Tiene un caracter integral, es decir, es para todos los estudiantes." )
(call ?*writer* newLine)
	(call ?*writer* write "* Tiene asignaturas comunes (para todos) y optativas (elegidas por el estudiante y ofrecidas por el centro).")
(call ?*writer* newLine)
	(call ?*writer* write "* Esta organizada en dos ciclos de dos años cada uno." )
(call ?*writer* newLine)
	(call ?*writer* write "* Las asignaturas se imparten por licenciados (aunque en el primer ciclo puede haber maestros).")
(call ?*writer* newLine)
  (retract-string "(nivel graduado)")
(call ?*writer* close)    )




(defrule nivelBachillerato
(and(nombre  mejoraAcademica)(nivel bachiller))
=>
	(call ?*writer* write "Que bien se estaba en el instituto, pero ya estas preparado para dar el salto
La selectividad es el examen que hay que superar para poder acceder a los estudios universitarios.
Su nombre correcto es Pruebas de Aptitud para el Acceso a la Universidad (PAAU) y
se realiza al finalizar el ultimo curso de bachillerato.
Los alumnos procedentes de bachillerato no pueden acceder a estudios universitarios
si no superan la prueba de Selectividad.
Los alumnos que en su momento cursaron el Curso de Orientacion Universitaria (COU),
ya extinguido, tienen acceso a diplomaturas, ingenierias tecnicas y arquitectura tecnica
sin necesidad de tener superada la selectividad")
(call ?*writer* newLine)
    (retract-string "(nivel bachiller)")
(call ?*writer* close)
)




(defrule masters
(and(and(nombre  mejoraAcademica)(nivel uni))(estudiar si))
=>
	(call ?*writer* write "Un master es un grado academico otorgado a aquellos estudiantes que terminan un curso de")
	(call ?*writer* newLine)
(call ?*writer* write "segundo nivel de posgrado, el cual tiene entre uno y tres años de duracion." )
(call ?*writer* newLine)
	(call ?*writer* write "Buscan ampliar y desarrollar los conocimientos para la solucion de problemas disciplinarios, interdisciplinarios o profesionales,")
(call ?*writer* newLine)
	(call ?*writer* write "y ademas dotar a la persona de los instrumentos basicos que la habilitan como investigador en un area especifica")
(call ?*writer* newLine)
	(call ?*writer* write "que le permitan profundizar teorica y conceptualmente en un campo del saber.
    * M.S.P. son las siglas de Maestria en Salud Publica.
    * M.C. son las siglas de Maestria en Ciencias y se otorga a quienes terminan
      satisfactoriamente estudios de posgrado en alguna area cientifica o tecnologica.
    * M.A. son las siglas de Maestria en Artes.
    * M.A.A. son las siglas de Maestria en area Aplicada.
    * M.I. son las siglas de Maestria en Ingenieria.
    * M.T.E. son las siglas de Maestria en Tecnologia Educativa.
    * LL.M. son las siglas de Maestria en Jurisprudencia.
    * M.P.M. son las siglas de Master en Project Management (Gestion de Proyectos en ingles).
    * M.G.T I. son las siglas de Master en Gestion de las Tecnologias de Informacion.")
(call ?*writer* newLine)
(retract-string "(estudiar si)")
(call ?*writer* close)
    )

(defrule nomasters
(and(and(nombre  mejoraAcademica)(nivel uni))(estudiar no))
=>
	(call ?*writer* write "Ya has estudiado bastante, ahora a trabajar, puedes ayudarte con nuestro asistente" )
(call ?*writer* newLine)
(retract-string "(estudiar no)")
(call ?*writer* close)
    )


(defrule siPiensas
(and(nombre mejoraVida)(pensar si))
=>
(assert(nombre tenerMeta)
        (retract-string "(pensar si)"))
)

(defrule noPiensas
(and(nombre mejoraVida)(pensar no))
=>
(assert(pensart consejoPensar)
        (retract-string "(pensar si)"))
)

(defrule consejoPensar
(pensart consejoPensar)
=>
	(call ?*writer* write "Medita. Pasa algo de tiempo solo con tus pensamientos.
Hay una razon por el que es el primer consejo de la lista.
Si sigues este consejo vuelve a intentarlo." )
(call ?*writer* newLine)
    (retract-string "(pensart consejoPensar)")
(call ?*writer* close)
)

(defrule siMetas
(and(nombre tenerMeta)(metas y))
=>
(assert(feliz eresFeliz))
        (retract-string "(metas y)")
)

(defrule noMetas
(and(nombre tenerMeta)(metas n))
=>
(assert(decir consejoMetas))
            (retract-string "(metas n)")
)

(defrule consejoMetas
(decir consejoMetas)
=>
	(call ?*writer* write "Ponte una meta que alcanzar todos los dias.
Deja la rutina aunque sea por un segundo.
Esto significa hablar con alguien que usualmente no hablas o empezar un proyecto
con el que te sientas intimidado. No es necesario pensar en el futuro,
sino simplemente tienes que tener una meta y cumplirla." )
(call ?*writer* newLine)
            (retract-string "(decir consejoMetas)")
(call ?*writer* close)
)



(defrule siFeliz
(and(feliz eresFeliz)(tiene felicidad))
=>
(assert(psi psicologo))
        (retract-string "(tiene felicidad)")
)

(defrule noFeliz
(and(feliz eresFeliz)(tiene tristeza))
=>
(assert(con consejoFeliz))
    (retract-string "(tiene tristeza)")
)

(defrule consejoFeliz
(con consejoFeliz)
=>
	(call ?*writer* write  "Detecta las partes del dia que te trajeron mas satisfaccion.
¿Que te hace feliz ahora? Haz una lista de las cosas que mejor te hicieron
sentir a lo largo del dia y dales una puntuacion del 1 al 10 y concentrate
en que te hizo ponerle esa puntuacion. Trata de incorporar mas de esas cosas
que te hacieron felices ayer para que seas mas feliz hoy..
La verdad es que no pareces encontrarte del todo bien
rogamos acudas a un especialista de la psicologia para que trate tu caso" )
(call ?*writer* newLine)
    (retract-string "(con consejoFeliz)")
(call ?*writer* close)
)

(defrule psicologo
(psi psicologo)
=>
	(call ?*writer* write "Que envidia, como nos gustaria estar como tu, enhorabuena" )
(call ?*writer* newLine)
    (retract-string "(psi psicologo)")
(call ?*writer* close)
)



(defrule peso
(and(nombre Fisico)(peso sobrepeso))
=>
(modify ?estado (nivel 2))
(assert(tiene dieta))
        (retract-string "(peso sobrepeso)")
)

(defrule peso2
(and(nombre Fisico)(peso normal))
=>
	(call ?*writer* write "Parece que no tienes problemas de sobrepeso, pero aun asi , es muy importante para el cuerpo hacer deporte regularmente, ayuda a relajarse y elimina las tensiones descargando adrenalina, ademas de divirtiendonos.")
(call ?*writer* newLine)
        (retract-string "(peso normal)")
(call ?*writer* close))

(defrule deportedieta
(and(tiene dieta)(dieta no))
=>
	(call ?*writer* write "Deberias acudir a un endocrino, el te puede crear una dieta adaptada a ti que te ayudara a perder peso de forma adecuada y progresiva. Ademas, deberias realizar periodicamente un deporte aerobico como correr o montar en bicicleta, y en seguida notaras los resultados.")
(call ?*writer* newLine)
(retract-string "(dieta no)")
(call ?*writer* close)
    )

(defrule deportedieta2
(and(tiene dieta)(dieta si))
    =>
	(call ?*writer* write "No te preocupes si los resultados no llegan de forma inmediata, el cuerpo requiere mucho tiempo para adaptarse y progresivamente veras los frutos de tu trabajo duro, animo!")
(call ?*writer* newLine)
    (retract-string "(dieta si)")
(call ?*writer* close)
)

(defglobal ?*file* = ( new java.io.OutputStreamWriter ( new java.io.FileOutputStream "C://salida.txt" ) ) )
(defglobal ?*writer* = ( new java.io.BufferedWriter ?*file* ) )
(run)